package com.example.server.controller;

import com.example.server.entity.User;
import org.springframework.web.bind.annotation.*;

/**
 * Java中的6种请求方式
 */
@RestController
public class RequestMethod {

    /**
     * 作用：绑定HTTP请求参数到控制器方法的参数上
     * 举例：/greeting?name=John
     * @param name
     * @return
     */
    @GetMapping("/greeting")
    public String greeting(@RequestParam(name="name",required = false,defaultValue = "world") String name) {
        return "Hello,"+name;
    }

    /**
     * 作用：绑定URL中的模板变量到控制器方法的参数上
     * 举例：/users/1
     * @param name
     * @return
     */
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") Long id) {
//        return userService.findById(id);
        return null;
    }

    /**
     * 作用：绑定URL路径中的矩阵变量到控制器方法的参数上
     * 举例：/owners/42/pets/21;q=123
     */
    @GetMapping("/owners/{ownerId}/pets/{petId}")
    public User findUser(@PathVariable String ownerId,
                         @MatrixVariable(name = "q",pathVar = "petId") int query) {
//        return userService.findById(id);
        return null;
    }


    /**
     * 作用：将HTTP请求体的内容绑定到控制器方法的参数上
     * 举例：HTTP POST 请求，内容: {“name”: “John”}
     * @param name
     * @return
     */
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
//        return userService.save(user);
        return null;
    }

    /**
     * 作用：绑定HTTP请求头到控制器方法的参数上
     * 举例：设置请求头User-Agent
     * @param name
     * @return
     */
    @GetMapping("/header")
    public String getHeader(@RequestHeader("User-Agent") String userAgent) {
        return "User-Agent" + userAgent;
    }

    /**
     * 作用：绑定HTTP请求的Cookie值到控制器方法的参数上
     * 举例：设置Cookie sessionId
     * @param name
     * @return
     */
    @GetMapping("/cookie")
    public String getCookie(@CookieValue(value = "sessionId",defaultValue = "defaultSessionId") String sessionId) {
        return "SessionId" + sessionId;
    }


}
